100 REM  CODEBREAKER XBASIC
110 DIM CODE$(8),GUESS$(8)
120 RANDOMIZE
130 DISPLAY AT(11,9)BEEP ERASE ALL :"CODEBREAKER"
140 DISPLAY AT(19,1)BEEP :"NUMBER OF CODES? (1-8)"
150 DISPLAY AT(21,6)BEEP :"DIGITS EACH CODE?"
160 ACCEPT AT(19,24)VALIDATE(DIGIT):CODES
170 ACCEPT AT(21,24)VALIDATE(DIGIT):DIGITS
180 IF CODES>DIGITS THEN DISPLAY AT(24,2)BEEP :"NO MORE CODES THAN DIGITS" :: GOTO 160
190 FOR A=1 TO CODES!CHOOSE CODES
200 CODE$(A)=STR$(INT(RND*DIGITS))
210 FOR B=0 TO A-1!NO DUPLICATES
220 IF CODE$(A)=CODE$(B)THEN 200
230 NEXT B
240 NEXT A
250 ROW=2
260 DISPLAY AT(1,1)ERASE ALL :"GUESS       RIGHT   PLACE"
270 DISPLAY AT(24,3):"ENTER 'X' FOR SOLUTION"
280 ACCEPT AT(ROW,1):C$
290 IF C$="X" THEN 470!GIVEUP OR RESET
300 FOR D=1 TO CODES!BREAK UP GUESS
310 GUESS$(D)=SEG$(C$,D,1)
320 NEXT D
330 RIGHT,PLACE=0
340 FOR E=1 TO CODES!CHECK GUESS FOR CORRECTNESS
350 FOR F=1 TO CODES
360 IF CODE$(E)=GUESS$(F)THEN RIGHT=RIGHT+1 :: IF E=F THEN PLACE=PLACE+1
370 NEXT F
380 NEXT E
390 DISPLAY AT(ROW,14):RIGHT
400 DISPLAY AT(ROW,22):PLACE
410 IF PLACE<>CODES THEN ROW=ROW+1 :: IF ROW>22 THEN 470 ELSE 280
420 DISPLAY AT(23,1)BEEP :"YOU WIN WITH";ROW-1;"GUESSES."
430 DISPLAY AT(24,1)BEEP :"PLAY AGAIN? (Y/N) Y"
440 ACCEPT AT(24,19)SIZE(-1)BEEPVALIDATE("YN"):X$
450 IF X$="Y" THEN 190
460 STOP
470 DISPLAY AT(23,1)BEEP :"THE CODE IS"!LOSE, GIVE UP, OR RESET
480 FOR G=1 TO CODES
490 DISPLAY AT(23,12+G):CODE$(G)
500 NEXT G
510 DISPLAY AT(24,1)BEEP :"PLAY AGAIN? (Y/N) Y"
520 ACCEPT AT(24,19)SIZE(-1)BEEPVALIDATE("YN"):X$
530 IF X$="Y" THEN 130
